import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, roc_auc_score, confusion_matrix
from sklearn.preprocessing import StandardScaler

# 创建一个简单的示例数据集
# 假设数据集包含以下特征：
# - 年龄（Age）
# - 性别（Gender，0 表示女性，1 表示男性）
# - 症状（Symptom，0 表示无症状，1 表示有症状）
# 目标变量：是否有病（Disease，0 表示无病，1 表示有病）

data = {
    'Age': [25, 45, 60, 35, 55, 40, 65, 30, 50, 45],
    'Gender': [1, 0, 1, 0, 1, 0, 1, 0, 1, 0],
    'Symptom': [0, 1, 1, 0, 1, 0, 1, 0, 1, 1],
    'Disease': [0, 1, 1, 0, 1, 0, 1, 0, 1, 1]
}

# 将数据转换为 DataFrame
df = pd.DataFrame(data)

# 分离特征和目标变量
X = df[['Age', 'Gender', 'Symptom']]  # 特征
y = df['Disease']                     # 目标变量

# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 数据标准化（可选，但对逻辑回归有帮助）
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 创建逻辑回归模型
model = LogisticRegression()

# 训练模型
model.fit(X_train, y_train)

# 预测测试集的概率
y_pred_proba = model.predict_proba(X_test)[:, 1]  # 只取有病的概率（第二列）

# 输出预测概率
print("预测患者有病的概率：")
print(y_pred_proba)

# 评估模型性能
y_pred = model.predict(X_test)  # 预测分类结果
print("\n模型评估：")
print(f"准确率（Accuracy）：{accuracy_score(y_test, y_pred)}")
print(f"AUC：{roc_auc_score(y_test, y_pred_proba)}")
print(f"混淆矩阵（Confusion Matrix）：\n{confusion_matrix(y_test, y_pred)}")